package com.cg.design.graphicdesignpattern.decorator;

import java.util.ArrayList;

/**
 * 表示可以显示多行字符串的类，是Display的子类
 *
 * @program: LeetCode->MultiStringDisplay
 * @description: 表示可以显示多行字符串的类，是Display的子类
 * @author: cg
 * @create: 2022-03-25 19:51
 **/
public class MultiStringDisplay extends Display {

    /**
     * 要显示的多行字符串
     */
    private final ArrayList<String> body = new ArrayList<>();

    /**
     * 最大字符数
     */
    private int columns = 0;

    /**
     * 添加字符串
     * @param msg
     */
    public void add(String msg) {
        body.add(msg);
        updateColumns(msg);
    }

    @Override

    public int getColumns() {
        // 获取字符数
        return columns;
    }

    @Override
    public int getRows() {
        // 获取行数
        return body.size();
    }

    @Override
    public String getRowText(int row) {
        // 获取指定行的内容
        return body.get(row);
    }

    /**
     * 更新字符数
     * @param msg
     */
    private void updateColumns(String msg) {
        if (msg.getBytes().length > columns) {
            columns = msg.getBytes().length;
        }
        for (int row = 0; row < body.size(); row++) {
            int fills = columns - body.get(row).getBytes().length;
            if (fills > 0) {
                body.set(row, body.get(row) + spaces(fills));
            }
        }
    }

    /**
     * 补上空格
     * @param count
     * @return
     */
    private String spaces(int count) {
        StringBuffer buffer = new StringBuffer();
        for (int i = 0; i < count; i++) {
            buffer.append(' ');
        }
        return buffer.toString();
    }

}
